# 面试题 16.10. 生存人数
# 给定 N 个人的出生年份和死亡年份，第 i 个人的出生年份为 birth[i]，死亡年份为 death[i]，实现一个方法以计算生存人数最多的年份。
# 你可以假设所有人都出生于 1900 年至 2000 年（含 1900 和 2000 ）之间。如果一个人在某一年的任意时期处于生存状态，那么他应该被纳入那一年的统计中。例如，生于 1908 年、死于 1909 年的人应当被列入 1908 年和 1909 年的计数。
# 如果有多个年份生存人数相同且均为最大值，输出其中最小的年份。

# 示例：
# 输入：
# birth = {1900, 1901, 1950}
# death = {1948, 1951, 2000}
# 输出： 1901

# 提示：
# 0 < birth.length == death.length <= 10000
# birth[i] <= death[i]

from collections import Counter


class Solution:
    def maxAliveYear(self, birth: List[int], death: List[int]) -> int:
        birth_counter = Counter(birth)  # 出生
        death_counter = Counter(death)  # 去世
        live_num, live_max, live_max_year = 0, 0, 0
        for i in range(1900, 2001):     # 遍历 1900 --- 2000 全部年份
            live_num += birth_counter[i]
            if live_num > live_max:  # 先计算人数，不需要等于，题目要求的就是最小的年份
                live_max = live_num
                live_max_year = i
            live_num -= death_counter[i]    # 然后减去去世的人数
        return live_max_year
